Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Обчислення елементарних функцій на математичному співпроцесорі

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 4 з дисципліни: “Системне програмування” на тему: “Обчислення елементарних функцій на математичному співпроцесорі” Мета лабораторної роботи Познайомитися з принципами роботи математичного співпроцесора та оволодіти навиками використання вбудованих елементарних математичних функцій та реалізації розгалужень. Теоретичні відомості У центральному процесорі команди умовних переходів виконуються відповідно до значень окремих бітів регістра прапорців процесора. У арифметичному співпроцесорі існують спеціальні команди порівнянь, за наслідками виконання яких, встановлюються біти кодів умов в регістрі стану: FCOM – порівняння; FICOM – порівняння цілих чисел; FCOMP – порівняння дійсних чисел і вилучення зі стеку; FICOMP – порівняння цілих чисел і вилучення зі стеку; FCOMPP – порівняння і подвійне вилучення зі стеку (ST(0), ST(1)); FTST – порівняння операнда з нулем; FXAM – аналіз операнда на тип числа (скінчене число, денормалізоване число, нуль, нескінченність, ...). Індивідуальне завдання Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані повинні вводитися з клавіатури, як дійсні числа. Програма повинна складатися з двох модулів: головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора. Переконатися у правильності роботи кожного модуля зокрема та програми загалом. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. 29.   Примітка: ai – елементи масиву дійсних чисел подвійної точності; c та d  дійсні числа одинарної точності. Код програми main.cpp #include <iostream> #include <cmath> #include <conio.h> extern "C" double *calc(double *, int, float, float); void main() { std::cout << "lg(25 + 2 * a[i]) / d / (c + a[i] - 1),\t\tc > d" << std::endl << "(c + 23 - d + 4) / (a[i] - ln(a[i] + c / d)),\tc <= d" << std::endl << std::endl; float c, d; std::cout << "c = "; std::cin >> c; do { std::cout << "d = "; std::cin >> d; } while (d == 0); int n; do { std::cout << std::endl << "Enter number of elements in the array: "; std::cin >> n; } while (n <= 0); double *a = (double *)malloc(n * sizeof(double)); std::cout << std::endl; if (c > d) for (int i = 0; i < n; ++i) { do { std::cout << "a[" << i << "] = "; std::cin >> a[i]; } while (25 + 2 * a[i] <= 0 || c + a[i] - 1 == 0); } else for (int i = 0; i < n; ++i) { do { std::cout << "a[" << i << "] = "; std::cin >> a[i]; } while (a[i] + c / d <= 0 || a[i] - log(a[i] + c / d) == 0); } double *result_asm = calc(a, n, c, d); for (int i = 0; i < n; ++i) { std::cout << std::endl << "C: "; if (c > d) std::cout << log10(25 + 2 * a[i]) / d / (c + a[i] - 1); else std::cout << (c + 23 - d + 4) / (a[i] - log(a[i] + c / d)); std::cout << std::endl << "Asm: " << result_asm[i] << std::endl; } free(a); free(result_asm); _getch(); } calc.asm .686 .model flat, c .data const_1 dd 1.0 const_2 dd 2.0 const_4 dd 4.0 const_23 dd 23.0 const_25 dd 25.0 .code extrn malloc : proc calc proc push ebp mov ebp, esp mov eax, [ebp+12] sal eax, 3 pop ebp push eax call malloc add esp, 4 mov edi, eax push ebp mov ebp, esp finit fld dword ptr [ebp+16] ; ST(0) = c fcomp dword ptr [ebp+20] ; compare c with d fstsw ax sahf mov esi, [ebp+8] mov ecx, 0 ja c_above_d c_less_equal_d: fld dword ptr [ebp+16] ; ST(0) = c fadd const_23 ; ST(0) = c + 23 fsub dword ptr [ebp+20] ; ST(0) = c + 23 - d fadd const_4 ; ST(0) = c + 23 - d + 4 fldln2 ; ST(0) = ln(2) fld dword ptr [ebp+16] ; ST(0) = c fdiv dword ptr [ebp+20] ; ST(0) = c / d ...
Антиботан аватар за замовчуванням

07.05.2017 14:05

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини